import vue from '@vitejs/plugin-vue'
/* Vue3.2的steup便签支持 name 属性 */
/* 使用JSX */
import vuejsx from '@vitejs/plugin-vue-jsx'
// unoCSS
import UnoCSS from 'unocss/vite'
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'
/* Antd和全局自定义组件库的自动引入 */
import Components from 'unplugin-vue-components/vite'
/* g-zip打包 */
import viteCompression from 'vite-plugin-compression'
import vitePluginImp from 'vite-plugin-imp'

import { persistentCachePlugin } from './persistent-cache-plugin'

/* 创建Vite的插件集合 */
export default function CreateVitePlugins(resolve: any) {
  const plugins = [
    vue(),

    UnoCSS(),

    // 默认`false`, 项目中已改为`true`, 可把代码中 `on: { click: xx }` 转成 `onClick: xxx`
    vuejsx({ transformOn: true }),

    Components({
      resolvers: [AntDesignVueResolver({ importLess: true, resolveIcons: true })],
      dirs: ['src/components'],
      include: [/\.vue$/, /\.vue\?vue/, /\.md$/],
      extensions: ['jsx', 'vue'],
      deep: true
    }),

    vitePluginImp({
      libList: [
        {
          libName: 'ant-design-vue',
          style(name) {
            return `ant-design-vue/es/${name}/style/index`
          }
        }
      ]
    })
  ]
  if (process.env.NODE_ENV === 'production') {
    plugins.push(
      viteCompression({
        verbose: true,
        disable: false,
        threshold: 1024,
        algorithm: 'gzip',
        ext: '.gz'
      })
    )
  } else {
    /** 首页加载优化，第一次将首页chunk存储到node_modules下的.vite/cache中为协商缓存，第二次调用
     *   第一次的cache优化加载速度，强缓存和协商缓存同时起作用
     */
    plugins.push(persistentCachePlugin())
  }

  return plugins
}
